package controlador;

import persistencia.PersistenciaUsuario;
import Util.UtilFecha;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Set;
import persistencia.PersistenciaAmigos;

/**
 *
 * @author JAVA
 */
public class Usuario {


    public enum Sexo {

        HOMBRE, MUJER
    };
    // Atributos
    private int idUsuario; // 
    private String usuario;//nick
    private String contrasenya;
    private String nombre;
    private String apellidos;
    private String email;
    private String poblacion;
    private String provincia;
    private String descripcion;
    private String tipo; //estado: Alta ó Baja
    private String perfil;// Publico ó Privado
    private String lema;
    private Date fechaNacimiento;
    private Date fechaAlta;
    private Date fechaBaja;
    private String sexo;
    private Collection<Invitacion> invitaciones; // max 20 invitaciones
    private Collection<Relacion> relaciones;
    private Collection<Mensaje> misMensajes;
    private List<Mensaje> favoritos;

    /*Constructor*/
    public Usuario(String nick, int idUsuario, String nombre, String apellidos, String email, String poblacion, String provincia, String descripcionPersonal, String tipoPerfil,
            String contrasenya, String estado, Date fechaA, Date fechaB, String lema, String sexo, Date fechaNac) {
        this.usuario = nick;
        this.idUsuario = idUsuario;
        this.nombre = nombre;
        this.apellidos = apellidos;
        this.email = email;
        this.poblacion = poblacion;
        this.provincia = provincia;
        this.descripcion = descripcionPersonal;
        this.perfil = tipoPerfil;
        this.contrasenya = contrasenya;
        this.tipo = estado;
        this.fechaAlta = fechaA;
        this.fechaNacimiento = fechaNac;
        this.fechaBaja = fechaB;
        this.lema = lema;
        this.sexo = sexo;
    }

    public Usuario() {
    }

    public Usuario(String nickUsuario,
            int idUsuario,
            String nombre,
            String apellidos,
            String email,
            String poblacion,
            String provincia,
            String descripcionPersonal,
            String tipoPerfil,
            String miestado,
            String contrasenya,
            Date fechaalta,
            Date fechabaja,
            Set<Invitacion> invitaciones,
            String lema,
            String sexo,
            Date fechaNacimiento) {

        this.usuario = nickUsuario;
        this.idUsuario = idUsuario;
        this.nombre = nombre;
        this.apellidos = apellidos;
        this.email = email;
        this.poblacion = poblacion;
        this.provincia = provincia;
        this.descripcion = descripcionPersonal;
        this.perfil = tipoPerfil;
        this.tipo = miestado;
        this.contrasenya = contrasenya;
        this.fechaAlta = fechaalta;
        this.fechaBaja = fechabaja;
        this.invitaciones = invitaciones;
        this.lema = lema;
        this.sexo = sexo;
        this.fechaNacimiento = fechaNacimiento;
    }
    
    /*Constructor Miguel inicio*/
    public Usuario(String usuario, String contrasenya, String nombre, String apellidos, String email,
            String poblacion, String provincia, String descripcion,
            String perfil, Date fechaNacimiento, String sexo) {

        long fechaIni = System.currentTimeMillis();//guardamos fecha actual como fecha de alta usuario
        this.usuario = usuario;
        this.contrasenya = contrasenya;
        this.nombre = nombre;
        this.apellidos = apellidos;
        this.email = email;
        this.poblacion = poblacion;
        this.provincia = provincia;
        this.descripcion = descripcion;
        this.tipo = "alta";
        this.perfil = perfil; // Público / privado
        this.fechaNacimiento = fechaNacimiento;
        this.fechaAlta = new Date(fechaIni);
        this.sexo = sexo;

    }

    /*constructor para alta NO MODIFICAR!*/
    public Usuario(String nombre, String apellidos, String usuario, String email,
            String poblacion, String provincia, String descripcion,String contrasenya,
            String perfil,String sexo, Date fechaNacimiento, String lema) {

        long fechaIni = System.currentTimeMillis();//guardamos fecha actual como fecha de alta usuario
        this.usuario = usuario;
        this.contrasenya = contrasenya;
        this.nombre = nombre;
        this.apellidos = apellidos;
        this.email = email;
        this.poblacion = poblacion;
        this.provincia = provincia;
        this.descripcion = descripcion;
        this.tipo = "alta";
        this.perfil = perfil; // Público / privado
        this.fechaNacimiento = fechaNacimiento;
        this.fechaAlta = new Date(fechaIni);
        this.fechaBaja= new Date(0);
        this.sexo = sexo;
        this.lema = lema;

    }

    public List <Mensaje> getFavoritos() {
        return favoritos;
    }

    public void setFavoritos(List<Mensaje> favoritos) {
        this.favoritos = favoritos;
    }

    public Collection<Invitacion> getInvitaciones() {
        return invitaciones;
    }

    public void setInvitaciones(Set<Invitacion> invitaciones) {
        this.invitaciones = invitaciones;
    }

    public Collection<Mensaje> getMisMensajes() {
        return misMensajes;
    }

    public void setMisMensajes(Collection misMensajes) {
        this.misMensajes = misMensajes;
    }

    public Collection<Relacion> getRelaciones() {
        return relaciones;
    }

    public void setRelaciones(Set<Relacion> relaciones) {
        this.relaciones = relaciones;
    }

    public String getPerfil() {
        return perfil;
    }

    public String getSexo() {
        return sexo;
    }

    public String getApellidos() {
        return apellidos;
    }

    public String getContrasenya() {
        return contrasenya;
    }

    public String getDescripcion() {
        return descripcion;
    }

    public String getEmail() {
        return email;
    }

    public Date getFechaAlta() {
        return fechaAlta;
    }

    public Date getFechaBaja() {
        return fechaBaja;
    }

    public Date getFechaNacimiento() {
        return fechaNacimiento;
    }

    public int getIdUsuario() {
        return idUsuario;
    }

    public String getLema() {
        return lema;
    }

    public String getNombre() {
        return nombre;
    }

    public String getPoblacion() {
        return poblacion;
    }

    public String getProvincia() {
        return provincia;
    }

    public String getTipo() {
        return tipo;
    }

    public String getUsuario() {
        return usuario;
    }

    public void setSexo(String Sexo) {
        this.sexo = Sexo;
    }

    public void setPerfil(String perfil) {
        this.perfil = perfil;
    }

    public void setApellidos(String apellidos) {
        this.apellidos = apellidos;
    }

    public void setContrasenya(String contrasenya) {
        this.contrasenya = contrasenya;
    }

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public void setFechaAlta(Date fechaAlta) {
        this.fechaAlta = fechaAlta;
    }

    public void setFechaBaja(Date fechaBaja) {
        this.fechaBaja = fechaBaja;
    }

    public void setFechaNacimiento(Date fechaNacimiento) {
        this.fechaNacimiento = fechaNacimiento;
    }

    public void setIdUsuario(int idUsuario) {
        this.idUsuario = idUsuario;
    }

    public void setLema(String lema) {
        this.lema = lema;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public void setPoblacion(String poblacion) {
        this.poblacion = poblacion;
    }

    public void setProvincia(String provincia) {
        this.provincia = provincia;
    }

    public void setTipo(String tipo) {
        this.tipo = tipo;
    }

    public void setUsuario(String usuario) {
        this.usuario = usuario;
    }
    /*se utiliza para para formatear fecha introducida de formulario*/

    public void setFormatoFechaNacimiento(String fecha) {
        this.setFechaNacimiento(UtilFecha.obtenerFecha(fecha));
    }

    // Persistencia
    
    public static List<Usuario> getListaAmigos(String nick){
        return PersistenciaAmigos.consultaAmigos(nick);
    }


    public static Usuario devuelveUsuario(String nick) {
        return persistencia.PersistenciaUsuario.cargaUsuario(nick);
    }

  //comprobar this
    public static void AltaUsuario(Usuario usu) {
        PersistenciaUsuario.registrarUsuario(usu);
    }


    public static void ActualizaUsuario(Usuario usu) {
        PersistenciaUsuario.actualizaUsuario(usu);

    }

    public static boolean compruebaUsuario(String nick){
        return PersistenciaUsuario.existeUsuario(nick);
    }
    
    public static boolean compruebaContrasenna(String nick, String auxClave){
        return PersistenciaUsuario.compruebaContrasenna(nick,auxClave);
    }
    public void cargarMensajes() {

        this.setMisMensajes(persistencia.PersistenciaMensajes.recuperarMensajes(this.usuario));
    }

    public void addMsg(Mensaje msg) {
        if (msg != null) {
            this.misMensajes.add(msg);
        }
        persistencia.PersistenciaMensajes.registraMsg(msg);
    }
    
    public void cargarRelaciones(){
        this.setRelaciones(PersistenciaAmigos.consultaRelaciones(this.usuario));
    }
    
    public void setRelaciones(Collection<Relacion> relaciones){
        this.relaciones= relaciones;
    }
    
    @Override
    public String toString(){
        return ""+this.getUsuario();
    }
}
